const axios=require('axios')
const cheerio=require('cheerio')
const fs=require('fs')

const  recommend=function(data){
  
  // 每次抓取完之后，再次抓取会先把之前抓取的数据置空

  // 存储抓取的数据
let headerBook=[]
const $=cheerio.load(data)
// 选中标签元素中的所有的img  并返回一个cheerio对象
const item=$("#hotcontent .ll .image img")
// 作品简介
const synopsis=$('#hotcontent .ll .item  dd')

  // 作者
  const author=$('#hotcontent .ll .item  span')

  // 作品连接
  const link=$('#hotcontent .ll .item .image a')

item.map((obj)=>{
  // console.log(item[obj]);
  // 这个map循环出来的是属性名
  let img=$(item[obj]).attr('src')
  let name=$(item[obj]).attr('alt')
  // 简介
  let jianjie=$(synopsis[obj]).text()
  // 作者
  let zuozhe=$(author[obj]).text()
  // 作品链接
  let href=$(link[obj]).attr('href')
  // href='http://www.biqugse.com'+href
  href=href.slice(1)
    // console.log(href);
  img='http://www.biqugse.com'+img
  headerBook.push({img,name,jianjie,zuozhe,href})
})

return headerBook

}

//这是获取底部推荐的数据
const List=function(data){
  let List=[]
  const $=cheerio.load(data)
  let type=$('#newscontent .l li .s1')
let Name=$('#newscontent .l li .s2 a')
let newchapter=$('#newscontent .l li .s3 a')
let zuozhe=$('#newscontent .l li .s4')
Name.map((item)=>{
  let Type=$(type[item]).text()
  let bookname=$(Name[item]).text()
  let href=$(Name[item]).attr('href')
  let Author=$(zuozhe[item]).text()
  let newChapter=$(newchapter[item]).text()
  let chapterUrl=$(newchapter[item]).attr('href')
  chapterUrl=chapterUrl.slice(-13,-5)
  href=href.slice(1)
  List.push({
    // 小说类型
    type:Type,
    // 小说书名
    bookname,
    // 每本小说的id
    href,
        //作者
        author:Author,
        // 最新章节名称
        newChapter,
        //小说最新章节的url
        chapterUrl
    
  })
})
return List
}

// 这是获取顶部强推的数据
const NovelList=function(data){
  let List=[]
  const $=cheerio.load(data)
  let type=$('#hotcontent .r li .s1')
let Name=$('#hotcontent .r li .s2 a')
let zuozhe=$('#hotcontent .r li .s5')
Name.map((item)=>{
  let Type=$(type[item]).text()
  let bookname=$(Name[item]).text()
  let href=$(Name[item]).attr('href')
  let Author=$(zuozhe[item]).text()
  href=href.slice(1)
  List.push({
    // 小说类型
    type:Type,
    // 小说书名
    bookname,
    // 每本小说的id
    href,
        //作者
        author:Author,
        // 最新章节名称
  })
})
return List
}


// 专区首页底部推荐上部分类别推荐方法
const ClassiFication=function(data){
  let List=[]
  const $=cheerio.load(data)
  let Title=$('.novelslist .content h2')
  let Name=$('.novelslist .content .top dl dt a')
  let img=$('.novelslist .content .top .image img')
  // let href=$('#novelslist1 .content .top .image a')
  let Abstract=$('.novelslist .content .top dd')
  Name.map((item)=>{
    let title=$(Title[item]).text()
    let name=$(Name[item]).text()
    let href=$(Name[item]).attr('href')
    let imghref=$(img[item]).attr('src')
    imghref=`http://www.biqugse.com${imghref}`
    let abstract=$(Abstract[item]).text()
    List.push({
      title,
      name,
      href,
      imghref,
      abstract
    })
  })
  return List
}


// 获取分类下面的小说推荐
const ClassiFicationRecommended=function(data){
  let List=[]
  const $=cheerio.load(data)
  const Name=$('.novelslist ul li a')
  const Author=$('.novelslist ul li')
  Name.map((item)=>{
    let href=$(Name[item]).attr('href')
    let author=$(Author[item]).text()
    List.push({
      href,
      author
    })
  })
  return List
}

// 抓取最新入库的小说
const PutinStorage=function(data){
  let List=[]
  const $=cheerio.load(data)
  let type=$('#newscontent .r li .s1')
  let Name=$('#newscontent .r li .s2 a')
  let zuozhe=$('#newscontent .r li .s5')
  Name.map((item)=>{
    let Type=$(type[item]).text()
    let bookname=$(Name[item]).text()
    let href=$(Name[item]).attr('href')
    let Author=$(zuozhe[item]).text()
    List.push({
      // 小说类型
      type:Type,
      // 小说书名
      bookname,
      // 每本小说的id
      href,
          //作者
      author:Author,
      
    })
  })
  return List
}

let  cookie=[]
// 获取网页数据
const getData=async function(){
 const res=await axios({
  url:'http://www.biqugse.com/',
  method:'GET',
  headers:{
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
  }
 })
//  需要返回爬取网页的DOM对象，也就是data中的数据
 return res
}


// 抓取网页首页数据
const main=async function(){

  // 每次抓取完之后，再次抓取会先把之前抓取的数据置空

  // 存储抓取的数据
let headerBook=[]
  // 调用getData获取页面元素
 const res=await getData()
 cookie=res.headers['set-cookie']
//  console.log(cookie2);
// console.log(cookie[1].length);
  const $=cheerio.load(res.data)
// 选中标签元素中的所有的img  并返回一个cheerio对象
  const item=$("#hotcontent .l .image img")
  // 作品简介
  const synopsis=$('#hotcontent .l .item  dd')

    // 作者
    const author=$('#hotcontent .l .item  span')

    // 作品连接
    const link=$('#hotcontent .l .item .image a')

  item.map((obj)=>{
    // console.log(item[obj]);
    // 这个map循环出来的是属性名
    let img=$(item[obj]).attr('src')
    let name=$(item[obj]).attr('alt')
    // 简介
    let jianjie=$(synopsis[obj]).text()
    // 作者
    let zuozhe=$(author[obj]).text()
    // 作品链接
    let href=$(link[obj]).attr('href')
    // href='http://www.biqugse.com'+href
    href=href.slice(1)
      // console.log(href);
    img='http://www.biqugse.com'+img
    headerBook.push({img,name,jianjie,zuozhe,href})
  })
  let Novelist=NovelList(res.data)
  let RecentlyNovel=List(res.data)
  let Classification=ClassiFication(res.data)
  let ClassiFicationrecommended=ClassiFicationRecommended(res.data)
  let putinStorage=PutinStorage(res.data)
  return {headerBook,RecentlyNovel,Novelist,Classification,ClassiFicationrecommended,putinStorage};
}


// 抓取小说的章节
const chapter=async function(url){
 // 每次抓取完之后，再次抓取会先把之前抓取的数据置空
    const  chapterList=[]   //章节列表数据
      try {
        // 请求小说章节数据
        const res=await axios({
          // url:`http://www.biqugse.com${url}`,
          url:`http://www.biqugse.com/${url}/`,
          method:'GET',
          headers:{
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
          }
         }
         )
         const $=cheerio.load(res.data)
        //  a标签跳转小说内容的href连接
        const link=$('#list dl dd a')

        // 获取每个章节二点名字
        link.map((item)=>{
          let href=$(link[item]).attr('href')
          let name=$(link[item]).text()
          // href='http://www.biqugse.com'+href
          chapterList.push({
            href,
            name
          })
        })
        return chapterList
      } catch (error) {
        //捕获错误信息
          console.log(error);
      }
  //  需要返回爬取网页的DOM对象，也就是data中的数据
}


// 抓取小说内容
const chapterContent=async function({id,url}){
  const contentList={}
      // 这里的id是每一本小说的id  url是每本小说每一种的url
      const res=await axios({
        url:`http://www.biqugse.com/${id}/${url}.html`,
        method:'GET',
        headers:{
          'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
        }
      })
      const $=cheerio.load(res.data)
      const content=$('#content').text()
      const bookname=$('.box_con .bookname h1').text()
      contentList.bookname=bookname
      contentList.content=content
      return contentList
}
// 抓取小说搜索页面
const reqSearchContent=async function(data){
  const searchResult=[]
  //将返回回来的cook进行切割，然后再搜索的时候再带给服务器
 let cookie1=cookie[0].slice(0,36)
 let  cookie2=cookie[1].slice(0,35)
  var config = {
    method: 'post',
    url: 'http://www.biqugse.com/case.php?m=search',
    headers: { 
      'Cookie':`${cookie2}${cookie1}`, 
      ...data.getHeaders()
    },
    data : data
  };
  
  const res=await axios(config)
  const $=cheerio.load(res.data)
  let type=$('#newscontent .l li .s1')
  let name=$('#newscontent .l li .s2 a')
  let newchapter=$('#newscontent .l li .s3 a')
  let author=$('#newscontent .l li .s4')
  name.map((item)=>{
    let Type=$(type[item]).text()
    let bookname=$(name[item]).text()
    let href=$(name[item]).attr('href')
    let Author=$(author[item]).text()
    let newChapter=$(newchapter[item]).text()
    let chapterUrl=$(newchapter[item]).attr('href')
    chapterUrl=chapterUrl.slice(-13,-5)
    href=href.slice(1)
    searchResult.push({
      // 小说类型
      type:Type,
      // 小说书名
      bookname,
      // 每本小说的id
      href,
          //作者
          author:Author,
          // 最新章节
          newChapter,
          //小说每一章的url
          chapterUrl
      
    })
  })
let GuessyouLike=PutinStorage(res.data)
let Recommend=recommend(res.data)
  return {searchResult,GuessyouLike,Recommend}

}

// 抓取小说类型页面
const reqType=async function({name}){
  try {
    let cookie1=cookie[0].slice(0,36)
    let  cookie2=cookie[1].slice(0,35)
    const res=await axios({
      url:`http://www.biqugse.com/${name}.html`,
      method:'GET',
      headers:{
        'Cookie':`${cookie2}${cookie1}`, 
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
      }
    })
    // 存储抓取的数据
let Book=[]
let searchResult=[]
const $=cheerio.load(res.data)
// 选中标签元素中的所有的img  并返回一个cheerio对象
const item=$("#hotcontent .ll .image img")
// 作品简介
const synopsis=$('#hotcontent .ll .item  dd')

  // 作者
  const author=$('#hotcontent .ll .item  span')

  // 作品连接
  const link=$('#hotcontent .ll .item .image a')
item.map((obj)=>{
  // console.log(item[obj]);
  // 这个map循环出来的是属性名
  let img=$(item[obj]).attr('src')
  let name=$(item[obj]).attr('alt')
  // 简介
  let jianjie=$(synopsis[obj]).text()
  // 作者
  let zuozhe=$(author[obj]).text()
  // 作品链接
  let href=$(link[obj]).attr('href')
  // href='http://www.biqugse.com'+href
  href=href.slice(1)
    // console.log(href);
  img='http://www.biqugse.com'+img
  Book.push({img,name,jianjie,zuozhe,href})
})

let type=$('#newscontent .l li .s1')
let Name=$('#newscontent .l li .s2 a')
let newchapter=$('#newscontent .l li .s3 a')
let zuozhe=$('#newscontent .l li .s4')
Name.map((item)=>{
  let Type=$(type[item]).text()
  let bookname=$(Name[item]).text()
  let href=$(Name[item]).attr('href')
  let Author=$(zuozhe[item]).text()
  let newChapter=$(newchapter[item]).text()
  let chapterUrl=$(newchapter[item]).attr('href')
  chapterUrl=chapterUrl.slice(-13,-5)
  href=href.slice(1)
  searchResult.push({
    // 小说类型
    type:Type,
    // 小说书名
    bookname,
    // 每本小说的id
    href,
        //作者
        author:Author,
        // 最新章节
        newChapter,
        //小说每一章的url
        chapterUrl
    
  })
})

let Rightnovel=PutinStorage(res.data)
return {Book,searchResult,Rightnovel};
// return Book
  } catch (error) {
      console.log(error);
  }
}
module.exports.reqType=reqType
module.exports.reqSearchContent=reqSearchContent
module.exports.chapterContent=chapterContent
module.exports.chapter=chapter
// 如果想让其他文件使用main这个函数，还需要再这个把main作为一个属性抛出
module.exports.main=main

